Background:
Numbers are thought to be mentally represented on a mental number line running horizontally from left to right (for Western cultures) or vertically from bottom to top for small to large numbers. Many studies suggest the existence of a horizontal spatial numerical association of response codes (SNARC) effect: faster left/right responses for small/large numbers, respectively. Recent studies suggest that vertical spatial numerical associations (SNA) are more robust than horizontal SNAs: vertical SNAs might be conceptual, whereas horizontal SNAs might be an artefact of the respective paradigms (Shaki & Fischer, 2018; Sixtus et al., 2019). We now investigated the relationship between the typical horizontal SNARC effect and two dimensional (horizontal and vertical) SNAs with and without spatially distributed response buttons. We thereby aim to address the questions:
Is the SNARC effect an artefact of its response codes, i.e., spatially distributed response buttons?
How do SNAs that are spatially primed (i.e., SNARC) relate to conceptual SNAs?
library(plyr)
library(afex)
library(ggplot2)
library(reshape)
library(data.table)
read_data <- function(directory, separator=","){
x <- data.frame()
for(i in list.files(directory)){
i_dat <- read.delim(paste(directory,"/",i, sep = ""), comment.char="#", sep=separator, header=T)
x <- rbind(x, i_dat)
}
return(x)
}
num <- function(x){
as.numeric(as.character(x))
}
IES <- function(dat, FUN="mean"){
dat$rt <- num(dat$rt)
dat$correct <- num(dat$correct)
if(FUN=="mean"){
dat$ies <- mean(dat$rt, na.rm = T) / mean(dat$correct, na.rm = T)
} else if(FUN=="median"){
dat$ies <- median(dat$rt, na.rm = T) / mean(dat$correct, na.rm = T)
}
return(dat)
}
t_report <- function(ttest){
if(ttest$p.value[[1]] < 0.001){
p <- ", p < 0.001"
}else{
p <- paste0(", p = ", as.character(round(ttest$p.value[[1]], digits = 3)))
}
paste0("t(", ttest$parameter[[1]], ") = ", round(ttest$statistic[[1]], digits = 2), p)
}
bars <- stat_summary(fun.y=mean, geom="bar", position = position_dodge())
errorbars <- stat_summary(fun.data="mean_se", geom="errorbar",position=position_dodge(width=0.10),width=0.2)
errorbars2 <- stat_summary(fun.data="mean_se", geom="errorbar",position=position_dodge(width=0.90),width=0.2)
points <- stat_summary(fun.y=mean, geom="point")
lines <- stat_summary(fun.y=mean, geom="line")
x_ax <- scale_x_continuous(breaks = c(1,2,8,9))
reg <- geom_smooth(method = lm, se=F)
hline <- geom_hline(yintercept = 0)
vline <- geom_vline(xintercept = 0)
cohens_dz <- function(ttest, do_print = F){
dz <- abs(as.numeric(ttest[[1]])/sqrt(as.numeric(ttest[[2]]+1)))
if (do_print){
print(paste0("Cohen's dz = ", round(dz, 2)))
} else {
return(dz)
}
}
layout <- theme_bw() + theme(axis.text = element_text(size = 26),
axis.title=element_text(size=24, face = "bold"),
strip.text = element_text(size=18, face = "bold"),
strip.background = element_rect(fill="white"),
rect = element_rect(fill = "transparent"),
plot.background = element_rect(fill = "transparent", color = NA),
title = element_text(size= 22, face="bold"))
layout2 <- theme_bw() + theme(axis.text = element_text(size = 16),
axis.title=element_text(size=20, face = "bold"),
# legend.position = "top",
legend.text = element_text(size=9),
legend.title = element_text(size=10, face="bold"),
strip.text = element_text(size=10, face = "bold"),
strip.background = element_rect(fill="white"),
legend.position = "none")
We conducted three experiments with the same group of participants which tested for 1) conceptual spatial-numerical associations (SNAs) in a Go/No-go setup including only one central response button, 2) SNAs in combination with alternating response codes (SNARC) including horizontally and vertically aligned response buttons (on a vertically erected button board), and 3) a rather conventional horizontal SNARC effect. (Setups of Experiments 1 and 2 are illustrated at the end of the page).
The first of the three experiments is very similar to https://doi.org/10.3389/fpsyg.2019.00172
The third of the three experiments is a standard SNARC experiment with a left and a right response button and a parity judgement task
In the second experiment, either the horizontally aligned buttons (same as in the third experiment) or the vertically aligned buttons had to be used for responses in a parity judgement task with auditorily presented numbers (1, 2, 8, 9). The response dimension (horizontally or vertically aligned buttons) was communicated via the colour of a central LED button. Responses were given with only one finger (index finger of dominant hand) and each trial was initiated by the participant pressing and holding the central button. The informative colour started after this inital button press. That is, the button board was a vertical wooden board with five buttons: top, right, bottom, left, central - the latter of which could change colour. The setup and experiments were built with arduino (https://www.arduino.cc) and expyriment (https://www.expyriment.org).
snas <- read.csv2("snas.csv")
snas <- snas[snas$training=="experiment",]
errors_sna <- ddply(snas, .(subject_id), function(x)
data.frame(n_correct_catch=length(x[x$correct==1 & x$catch==1,]$correct),
n_correct_noncatch=length(x[x$correct==1 & x$catch==0,]$correct),
n_incorrect_catch=length(x[x$correct==-1,]$correct),
n_incorrect_noncatch=length(x[x$correct==0,]$correct)))
errorrate_catch <- length(snas[snas$correct==-1&snas$catch==1,]$correct) / length(snas[snas$correct%in%c(-1,1) & snas$catch==1,]$correct)
errorrate_noncatch <- length(snas[snas$correct==0&snas$catch==0,]$correct) / length(snas[snas$correct%in%c(0,1) & snas$catch==0,]$correct)
answers <- read.csv2("answers.csv")
snas <- merge(snas, answers, by="subject_id")
snas <- snas[snas$language != "nongerman",]
errors_sna$errorrate_catch <- errors_sna$n_incorrect_catch / (errors_sna$n_incorrect_catch+errors_sna$n_correct_catch)
errors_sna$errorrate_noncatch <- errors_sna$n_incorrect_noncatch / (errors_sna$n_incorrect_noncatch+errors_sna$n_correct_noncatch)
too_many_errors_SNA <- errors_sna[which(errors_sna$errorrate_catch > mean(errors_sna$errorrate_catch) + 3*sd(errors_sna$errorrate_catch)),]$subject_id
snas$target <- num(snas$target)
## Warning in num(snas$target): NAs durch Umwandlung erzeugt
snas$position_index <- num(snas$position_index)
## Warning in num(snas$position_index): NAs durch Umwandlung erzeugt
snas$rt <- num(snas$rt)
## Warning in num(snas$rt): NAs durch Umwandlung erzeugt
snarc <- read.csv2("snarc.csv")
#during training
# snarc <- snarc[snarc$training=="training" & snarc$block==-1,]
#during experiment
snarc <- snarc[snarc$training == "experiment",]
snarc <- merge(snarc, answers, by="subject_id")
snarc <- snarc[snarc$language != "nongerman",]
# "correct" values:
# -999: middle button pressed
# -6: too slow (response)
# -5: too slow (release)
# -1: wrong dimension
print(paste("any incorrect responses: ", as.character(length(snarc[snarc$correct!=1,]$correct))))
## [1] "any incorrect responses: 409"
print(paste("wrong dimension: ", as.character(length(snarc[snarc$correct==-1,]$correct))))
## [1] "wrong dimension: 168"
print(paste("correct dimension, wrong button: ", as.character(length(snarc[snarc$correct==0,]$correct))))
## [1] "correct dimension, wrong button: 204"
print(paste("too slow (release or response): ", as.character(length(snarc[snarc$correct%in%c(-5, -6),]$correct))))
## [1] "too slow (release or response): 27"
print(paste("other error (middle button pressed): ", as.character(length(snarc[snarc$correct==-999,]$correct))))
## [1] "other error (middle button pressed): 10"
errors_snarc <- ddply(snarc, .(subject_id), function(x)
data.frame(n_correct=length(x[x$correct==1,]$correct),
n_incorrect=length(x[x$correct!=1,]$correct)))
errors_snarc$errorrate <- errors_snarc$n_incorrect / (errors_snarc$n_incorrect+errors_snarc$n_correct)
too_many_errors_snarc <- errors_snarc[which(errors_snarc$errorrate > mean(errors_snarc$errorrate) + 3*sd(errors_snarc$errorrate)),]$subject_id
mini_dat <- read.csv2("mini_dat.csv")
mini_dat <- mini_dat[mini_dat$training == "experiment",]
mini_dat$rt <- num(mini_dat$rt)
## Warning in num(mini_dat$rt): NAs durch Umwandlung erzeugt
mini_dat <- merge(mini_dat, answers, by="subject_id")
mini_dat <- mini_dat[mini_dat$language=="german",]
print(paste("any incorrect responses: ", as.character(length(mini_dat[mini_dat$correct!=1,]$correct))))
## [1] "any incorrect responses: 90"
print(paste("too slow: ", as.character(length(mini_dat[mini_dat$correct==-1,]$correct))))
## [1] "too slow: 12"
print(paste("wrong button: ", as.character(length(mini_dat[mini_dat$correct==0,]$correct))))
## [1] "wrong button: 78"
errors_mini_dat <- ddply(mini_dat, .(subject_id), function(x)
data.frame(n_correct=length(x[x$correct==1,]$correct),
n_incorrect=length(x[x$correct!=1,]$correct)))
errors_mini_dat$errorrate <- errors_mini_dat$n_incorrect / (errors_mini_dat$n_incorrect+errors_mini_dat$n_correct)
too_many_errors_mini_dat <- errors_mini_dat[which(errors_mini_dat$errorrate > mean(errors_mini_dat$errorrate) + 3*sd(errors_mini_dat$errorrate)),]$subject_id
exclude data sets with too many errors in any of the three experiments
snas <- snas[!snas$subject_id %in% too_many_errors_SNA & !snas$subject_id %in% too_many_errors_snarc & !snas$subject_id %in% too_many_errors_mini_dat,]
snarc <- snarc[!snarc$subject_id %in% too_many_errors_SNA & !snarc$subject_id %in% too_many_errors_snarc & !snarc$subject_id %in% too_many_errors_mini_dat,]
mini_dat <- mini_dat[!mini_dat$subject_id %in% too_many_errors_SNA & !mini_dat$subject_id %in% too_many_errors_snarc & !mini_dat$subject_id %in% too_many_errors_mini_dat,]
s1 <- aggregate(data=snas, rt~subject_id+target,mean)
s2 <- aggregate(data=snarc, rt~subject_id+target,mean)
s3 <- aggregate(data=mini_dat, rt~subject_id+target,mean)
s1$experiment <- "2d_sna"
s2$experiment <- "2d_snarc"
s3$experiment <- "1d_snarc"
ggplot(rbind(s1, s2, s3), aes(target, rt, colour=experiment)) + points + lines + errorbars + layout + scale_x_continuous(breaks = c(1, 2, 8, 9))
snas <- snas[snas$correct != -1,]
sna_noncatch <- snas[snas$catch == 0,]
sna_noncatch$side_position <- ifelse(sna_noncatch$position_index < 5, 1,
ifelse(sna_noncatch$position_index < 10, 2,
ifelse(sna_noncatch$position_index < 15, 3,
ifelse(sna_noncatch$position_index < 20, 4,5))))
sna_noncatch$side <- factor(sna_noncatch$side_position, labels=c("far_left", "left", "right", "far_right"))
sna_noncatch$generalside <- factor(ifelse(sna_noncatch$position_index < 10, 1,
ifelse(sna_noncatch$position_index < 15, 2,
3)),
labels=c("left", "right"))
sna_noncatch$vert_position <- (sna_noncatch$position_index %% 5) + 1
sna_noncatch$vert <- factor(sna_noncatch$vert_position, labels = c("far_down", "down", "up", "far_up"))
sna_noncatch$generalvert <- factor(ifelse(sna_noncatch$position_index %% 5 %in% c(0, 1), 1,
ifelse(sna_noncatch$position_index %% 5 == 2, 2,
3)),
labels=c("down", "up"))
sna_noncatch$distance_from_middle <- ifelse(sna_noncatch$position_index == 12, 0,
ifelse(sna_noncatch$position_index %in% c(6:8,11,13,16:18), 1,
ifelse(sna_noncatch$position_index %in% c(0:5,9,10,14,15,19:24), 2, 99)))
sna_noncatch$size_factor <- factor(ifelse(sna_noncatch$target < 5, 1, 2), labels = c("small", "large"))
sna <- sna_noncatch
data_agg <- ddply(sna, .(target, vert, side), summarize, mRT = mean(rt, na.rm=T), mER = 1-mean(correct, na.rm=T))
# no speed-accuracy tradeoff:
cor.test(data_agg$mRT, data_agg$mER)
##
## Pearson's product-moment correlation
##
## data: data_agg$mRT and data_agg$mER
## t = 5.0363, df = 62, p-value = 4.366e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.3377434 0.6928616
## sample estimates:
## cor
## 0.5388197
snarcy_hor_general_pre <- data.table(sna)[, .(ies=mean(rt, na.rm = T) / mean(correct, na.rm = T)), by=.(subject_id, generalside, target)]
snarcy_vert_general_pre <- data.table(sna)[, .(ies=mean(rt, na.rm = T) / mean(correct, na.rm = T)), by=.(subject_id, generalvert, target)]
snarcy_hor_general <- merge(snarcy_hor_general_pre[snarcy_hor_general_pre$generalside == "left",], snarcy_hor_general_pre[snarcy_hor_general_pre$generalside=="right",], by=c("subject_id", "target"))
snarcy_hor_general$RminusL <- snarcy_hor_general$ies.y - snarcy_hor_general$ies.x
snarcy_vert_general <- merge(snarcy_vert_general_pre[snarcy_vert_general_pre$generalvert == "down",], snarcy_vert_general_pre[snarcy_vert_general_pre$generalvert=="up",], by=c("subject_id", "target"))
snarcy_vert_general$UminusD <- snarcy_vert_general$ies.y - snarcy_vert_general$ies.x
snarcy_hor_general_slopes <- ddply(snarcy_hor_general, .(subject_id), function(x) coef(lm(RminusL ~ target, data=x)))
snarcy_vert_general_slopes <- ddply(snarcy_vert_general, .(subject_id), function(x) coef(lm(UminusD ~ target, data=x)))
##original rt
snarcy_hor_general_pre_rt <- aggregate(data=sna, rt ~ subject_id + generalside + target, mean)
snarcy_vert_general_pre_rt <- aggregate(data=sna, rt ~ subject_id + generalvert + target, mean)
snarcy_hor_general_rt <- merge(snarcy_hor_general_pre_rt[snarcy_hor_general_pre_rt$generalside == "left",],
snarcy_hor_general_pre_rt[snarcy_hor_general_pre_rt$generalside=="right",], by=c("subject_id", "target"))
snarcy_hor_general_rt$RminusL <- snarcy_hor_general_rt$rt.y - snarcy_hor_general_rt$rt.x
snarcy_vert_general_rt <- merge(snarcy_vert_general_pre_rt[snarcy_vert_general_pre_rt$generalvert == "down",],
snarcy_vert_general_pre_rt[snarcy_vert_general_pre_rt$generalvert=="up",], by=c("subject_id", "target"))
snarcy_vert_general_rt$UminusD <- snarcy_vert_general_rt$rt.y - snarcy_vert_general_rt$rt.x
snarcy_hor_general_slopes_rt <- ddply(snarcy_hor_general_rt, .(subject_id), function(x) coef(lm(RminusL ~ target, data=x)))
snarcy_vert_general_slopes_rt <- ddply(snarcy_vert_general_rt, .(subject_id), function(x) coef(lm(UminusD ~ target, data=x)))
ggplot(sna, aes(side, rt)) + points + errorbars + layout
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
ggplot(sna, aes(target, rt, colour=side)) + points + lines + errorbars + layout
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
ggplot(sna, aes(vert, rt)) + points + errorbars + layout
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
ggplot(sna, aes(target, rt, colour=vert)) + points + lines + errorbars + layout
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
ggplot(sna, aes(size_factor, rt, fill = generalside)) + bars + errorbars2 + layout
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
ggplot(sna, aes(size_factor, rt, fill = generalvert)) + bars + errorbars2 + layout
## Warning: Removed 81 rows containing non-finite values (stat_summary).
## Warning: Removed 81 rows containing non-finite values (stat_summary).
#RT general
ddply(sna, .(generalside), summarize, M=mean(rt, na.rm=T), SD=sd(rt, na.rm=T))
## generalside M SD
## 1 left 993.573 445.1189
## 2 right 1033.629 469.2166
ddply(sna, .(generalvert), summarize, M=mean(rt, na.rm=T), SD=sd(rt, na.rm=T))
## generalvert M SD
## 1 down 1076.8269 453.3306
## 2 up 950.3505 453.4368
side_rts <- aggregate(data=sna, rt ~ subject_id + generalside, mean)
t.test(side_rts$rt ~ side_rts$generalside, paired=T)
##
## Paired t-test
##
## data: side_rts$rt by side_rts$generalside
## t = -3.1363, df = 42, p-value = 0.003122
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -65.56745 -14.22439
## sample estimates:
## mean of the differences
## -39.89592
cohens_dz(t.test(side_rts$rt ~ side_rts$generalside, paired=T), T)
## [1] "Cohen's dz = 0.48"
vert_rts <- aggregate(data=sna, rt ~ subject_id + generalvert, mean)
t.test(vert_rts$rt ~ vert_rts$generalvert, paired=T)
##
## Paired t-test
##
## data: vert_rts$rt by vert_rts$generalvert
## t = 5.7774, df = 42, p-value = 8.3e-07
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 82.20125 170.45711
## sample estimates:
## mean of the differences
## 126.3292
cohens_dz(t.test(vert_rts$rt ~ vert_rts$generalvert, paired=T), T)
## [1] "Cohen's dz = 0.88"
#RT
ddply(sna, .(distance_from_middle), summarize, M=round(mean(rt, na.rm=T)), SD=round(sd(rt, na.rm=T)))
## distance_from_middle M SD
## 1 1 753 325
## 2 2 1101 462
sna_dist <- aggregate(data=sna, rt ~ subject_id + distance_from_middle, mean)
t.test(sna_dist$rt ~ sna_dist$distance_from_middle, paired=T)
##
## Paired t-test
##
## data: sna_dist$rt by sna_dist$distance_from_middle
## t = -29.701, df = 42, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -372.0418 -324.7003
## sample estimates:
## mean of the differences
## -348.3711
cohens_dz(t.test(sna_dist$rt ~ sna_dist$distance_from_middle, paired=T), T)
## [1] "Cohen's dz = 4.53"
#size
ddply(sna, .(size_factor), summarize, M=mean(rt, na.rm=T), SD=sd(rt, na.rm=T))
## size_factor M SD
## 1 small 936.5168 407.3745
## 2 large 1091.0577 491.3090
size_rts <- aggregate(data=sna, rt ~ subject_id + size_factor, mean)
t.test(size_rts$rt ~ size_rts$size_factor, paired = T)
##
## Paired t-test
##
## data: size_rts$rt by size_rts$size_factor
## t = -11.299, df = 42, p-value = 2.588e-14
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -182.6454 -127.2890
## sample estimates:
## mean of the differences
## -154.9672
cohens_dz(t.test(size_rts$rt ~ size_rts$size_factor, paired = T), T)
## [1] "Cohen's dz = 1.72"
The SNARC effect usually describes faster left side (or spatially lower) responses for small numbers and right side (or spatially upper) responses for large numbers. In this experiment, there was only one response button, but target numbers were presented at different locations in 2D space. Therefore, instead of response locations, we examined presentation locations. We therefore originally expected faster responses for small numbers when presented on the left side and/or in lower space (i.e., lower half of the screen) and for large number when presented on the right side and/or in upper space (i.e., upper half of the screen). In this study we found evidence for this only for the vertical dimension and we expected to find approximately the same in the present study.
Here, we inspected the horizontal dimension - both with IES (inverse efficiency score) and RTs as dependent variable. We were especially interested in the IES because it takes account of missed responses which are supposedly responses which would have taken longer than the maximum presentation time of 3 seconds. Interestingly, in the horizontal dimension we found a significant reverse effect. We’re not sure why.
ggplot(snarcy_hor_general, aes(target, RminusL)) +
points +
reg +
x_ax +
hline +
coord_cartesian(ylim=c(-150, 75)) +
labs(title="Horizontal 2D SNA", x = "Target number", y = "dIES (right - left) in ms") +
layout
# ggsave("sna_hor_poster.png", width = 7, height = 5.5, units='in', dpi=600, bg="transparent")
t_hor_ies <- t.test(snarcy_hor_general_slopes$target, mu = 0)
t_hor_ies
##
## One Sample t-test
##
## data: snarcy_hor_general_slopes$target
## t = 3.662, df = 42, p-value = 0.0006946
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 4.070315 14.063628
## sample estimates:
## mean of x
## 9.066971
t_report(t_hor_ies)
## [1] "t(42) = 3.66, p < 0.001"
cohens_dz(t_hor_ies, T)
## [1] "Cohen's dz = 0.56"
ggplot(snarcy_hor_general_rt, aes(target, RminusL)) +
points +
reg +
x_ax +
layout +
hline +
#coord_cartesian(ylim=c(-120, 100)) +
ylab("RT (right - left) in ms") +
xlab("Target number")
t_hor_rt <- t.test(snarcy_hor_general_slopes_rt$target, mu = 0)
t_hor_rt
##
## One Sample t-test
##
## data: snarcy_hor_general_slopes_rt$target
## t = 3.6093, df = 42, p-value = 0.0008113
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 3.874615 13.702745
## sample estimates:
## mean of x
## 8.78868
t_report(t_hor_rt)
## [1] "t(42) = 3.61, p < 0.001"
cohens_dz(t_hor_rt, T)
## [1] "Cohen's dz = 0.55"
Here, we inspected the vertical dimension - both with IES (inverse efficiency score) and RTs as dependent variable. Overall, the original study’s results were replicated.
ggplot(snarcy_vert_general, aes(target, UminusD)) +
points +
reg +
x_ax +
hline +
coord_cartesian(ylim=c(-150, 75)) +
ylab("dIES (top - bottom) in ms") +
xlab("Target number") +
labs(title="Vertical 2D SNA" ) +
layout
# ggsave("sna_vert_poster.png", width = 7, height = 5.5, units='in', dpi=600, bg="transparent")
t_vert_ies <- t.test(snarcy_vert_general_slopes$target, mu = 0)
t_vert_ies
##
## One Sample t-test
##
## data: snarcy_vert_general_slopes$target
## t = -2.0728, df = 42, p-value = 0.04437
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -9.3769341 -0.1253915
## sample estimates:
## mean of x
## -4.751163
t_report(t_vert_ies)
## [1] "t(42) = -2.07, p = 0.044"
cohens_dz(t_vert_ies, T)
## [1] "Cohen's dz = 0.32"
ggplot(snarcy_vert_general_rt, aes(target, UminusD)) +
points +
reg +
x_ax +
layout +
hline +
#coord_cartesian(ylim=c(-120, 100)) +
ylab("RT (top - bottom) in ms") +
xlab("Target number")
t_vert_rt <- t.test(snarcy_vert_general_slopes_rt$target, mu = 0)
t_vert_rt
##
## One Sample t-test
##
## data: snarcy_vert_general_slopes_rt$target
## t = -1.9971, df = 42, p-value = 0.05232
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -9.11749697 0.04773205
## sample estimates:
## mean of x
## -4.534882
t_report(t_vert_rt)
## [1] "t(42) = -2, p = 0.052"
cohens_dz(t_vert_rt, T)
## [1] "Cohen's dz = 0.3"
compare_slopes <- t.test(snarcy_hor_general_slopes$target, snarcy_vert_general_slopes$target, paired = T)
compare_slopes
##
## Paired t-test
##
## data: snarcy_hor_general_slopes$target and snarcy_vert_general_slopes$target
## t = 3.9853, df = 42, p-value = 0.0002631
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 6.820927 20.815341
## sample estimates:
## mean of the differences
## 13.81813
cohens_dz(compare_slopes, T)
## [1] "Cohen's dz = 0.61"
compare_rt_slopes <- t.test(snarcy_hor_general_slopes_rt$target, snarcy_vert_general_slopes_rt$target, paired = T)
compare_rt_slopes
##
## Paired t-test
##
## data: snarcy_hor_general_slopes_rt$target and snarcy_vert_general_slopes_rt$target
## t = 3.8624, df = 42, p-value = 0.000382
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 6.362074 20.285051
## sample estimates:
## mean of the differences
## 13.32356
cohens_dz(compare_rt_slopes, T)
## [1] "Cohen's dz = 0.59"
slopes_ies <- merge(snarcy_hor_general_slopes, snarcy_vert_general_slopes, by="subject_id")
slopes_ies$Horizontal <- slopes_ies$target.x
slopes_ies$Vertical <- slopes_ies$target.y
ggplot(slopes_ies, aes(Horizontal, Vertical)) +
geom_point(size=2.5) +
hline +
vline +
layout2 +
labs(title = "2D SNA slopes (IES)")
ggplot(slopes_ies, aes(Horizontal, Vertical)) +
geom_point(size=2.5) +
hline +
vline +
layout2 + reg +
labs(title = "2D SNA slopes (IES)")#+
#coord_cartesian(xlim=c(-20,20), ylim=c(-20, 20))
slopes_ies$Hor <- ifelse(slopes_ies$Horizontal < 0, "snarc", "reverse")
slopes_ies$Vert <- ifelse(slopes_ies$Vertical < 0, "snarc", "reverse")
ddply(slopes_ies, .(Hor), summarize, n = length(subject_id))
## Hor n
## 1 reverse 32
## 2 snarc 11
ddply(slopes_ies, .(Vert), summarize, n = length(subject_id))
## Vert n
## 1 reverse 18
## 2 snarc 25
ddply(slopes_ies, .(Hor,Vert), summarize, n = length(subject_id))
## Hor Vert n
## 1 reverse reverse 15
## 2 reverse snarc 17
## 3 snarc reverse 3
## 4 snarc snarc 8
cor.test(slopes_ies$Horizontal, slopes_ies$Vertical)
##
## Pearson's product-moment correlation
##
## data: slopes_ies$Horizontal and slopes_ies$Vertical
## t = -0.36023, df = 41, p-value = 0.7205
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3505993 0.2483637
## sample estimates:
## cor
## -0.05617013
slopes <- merge(snarcy_hor_general_slopes_rt, snarcy_vert_general_slopes_rt, by="subject_id")
slopes$Horizontal <- slopes$target.x
slopes$Vertical <- slopes$target.y
ggplot(slopes, aes(Horizontal, Vertical)) +
geom_point(size=2.5) +
hline +
vline +
layout2 +
labs(title = "2D SNA slopes (RTs)")
ggplot(slopes, aes(Horizontal, Vertical)) +
geom_point(size=2.5) +
hline +
vline +
layout2 + reg +
labs(title = "2D SNA slopes (RTs)") #+
#coord_cartesian(xlim=c(-20,20), ylim=c(-20, 20))
slopes$Hor <- ifelse(slopes$Horizontal < 0, "snarc", "reverse")
slopes$Vert <- ifelse(slopes$Vertical < 0, "snarc", "reverse")
ddply(slopes, .(Hor), summarize, n = length(subject_id))
## Hor n
## 1 reverse 31
## 2 snarc 12
ddply(slopes, .(Vert), summarize, n = length(subject_id))
## Vert n
## 1 reverse 17
## 2 snarc 26
ddply(slopes, .(Hor,Vert), summarize, n = length(subject_id))
## Hor Vert n
## 1 reverse reverse 14
## 2 reverse snarc 17
## 3 snarc reverse 3
## 4 snarc snarc 9
cor.test(slopes$Horizontal, slopes$Vertical)
##
## Pearson's product-moment correlation
##
## data: slopes$Horizontal and slopes$Vertical
## t = -0.47242, df = 41, p-value = 0.6391
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3658390 0.2318885
## sample estimates:
## cor
## -0.07357997
snarc_complete <- snarc
snarc <- snarc[snarc$correct==1,]
snarc$size <- factor(ifelse(snarc$target < 5, 1, 2), labels = c("small", "large"))
snarc$parity <- factor(ifelse(snarc$target%%2==0, 1, 2), labels=c("even", "odd"))
snarc$button <- factor(ifelse(snarc$pressed_button == "b'le'", 1, ifelse(snarc$pressed_button == "b'ri'", 2, ifelse(snarc$pressed_button == "b'do'", 3, ifelse(snarc$pressed_button=="b'up'", 4, 9)))), labels = c("left", "right", "down", "up"))
ggplot(snarc, aes(target, rt)) + lines + points + errorbars + x_ax + layout
ggplot(snarc, aes(target, rt, colour=dimension)) + lines + points + errorbars + x_ax + layout
ggplot(snarc, aes(parity, rt, colour=button, fill=button)) + bars + errorbars + facet_wrap(~dimension, ncol = 4) + layout
ggplot(snarc, aes(parity, rt, colour=dimension, fill=dimension)) + bars + errorbars + layout
ggplot(snarc, aes(target, rt, colour=button)) + lines + points + errorbars + x_ax + layout
ggplot(snarc, aes(as.integer(target>5), rt, colour=button)) + lines + points + errorbars + layout + scale_x_continuous(breaks = c(0, 1), labels = c("small", "large")) + labs(x = "target size")
#reaction time (rt)
ggplot(snarc, aes(button, rt)) + points + errorbars + layout
“pre-rt”: part of rt from target presentation until release of central button (pre-reaction time)
ggplot(snarc, aes(button, pre_rt)) + points + errorbars + layout
“mt” (movement time): part of rt from release of central button until press of response button (movement time)
ggplot(snarc, aes(button, mt)) + points + errorbars + layout
snarc_hor <- snarc[snarc$dimension=="horizontal",]
snarc_hor$side <- snarc_hor$button
snarc_hor$congruency <- factor(ifelse((snarc_hor$side == "left" & snarc_hor$size == "small") | (snarc_hor$side == "right" & snarc_hor$size == "large"), 1, 2), labels = c("congruent", "incongruent"))
ggplot(snarc_hor, aes(congruency, rt)) + points + errorbars + layout
ggplot(snarc_hor, aes(side, rt, colour=congruency)) + points + errorbars + layout
ggplot(snarc_hor, aes(target, rt, colour=congruency, shape=side)) + lines + stat_summary(fun.y=mean, geom="point", size=4) + errorbars + layout + x_ax
ps_agg <- aggregate(data=snarc_hor, rt ~ subject_id + target + side, mean)
ps_agg_snarc <- merge(ps_agg[ps_agg$side=="left",], ps_agg[ps_agg$side=="right",], by=c("subject_id", "target"))
ps_agg_snarc$dRT <- ps_agg_snarc$rt.y - ps_agg_snarc$rt.x
ggplot(ps_agg_snarc, aes(target, dRT)) + points + reg + layout + x_ax + hline + labs(x = "Target number", y = "dRT (right - left) in ms", title = "Horizontal 2D SNARC") + coord_cartesian(ylim = c(-60, 20))
# ggsave("snarc_hor_poster.png", units = "in", width = 7, height = 5.5, dpi = 600, bg="transparent")
This part is exploratory. Movement times are included only because we found a significant correlation between individual horizontal SNARC slopes with movement times from this experiment with individual (horizontal) SNARC slopes (with normal RTs) from Experiment 3 (1D SNARC) (see correlation analyses farther below). However, we do not know why the correlation manifests specifically in movement times.
ggplot(snarc_hor, aes(congruency, mt)) + points + errorbars + layout
ggplot(snarc_hor, aes(side, mt, colour=congruency)) + points + errorbars + layout
ggplot(snarc_hor, aes(target, mt, colour=congruency, shape=side)) + lines + stat_summary(fun.y=mean, geom="point", size=4) + errorbars + layout + x_ax
ps_agg_mt <- aggregate(data=snarc_hor, mt ~ subject_id + target + side, mean)
ps_agg_snarc_mt <- merge(ps_agg_mt[ps_agg_mt$side=="left",], ps_agg_mt[ps_agg_mt$side=="right",], by=c("subject_id", "target"))
ps_agg_snarc_mt$dMT <- ps_agg_snarc_mt$mt.y - ps_agg_snarc_mt$mt.x
ggplot(ps_agg_snarc_mt, aes(target, dMT)) + points + reg + errorbars + layout + x_ax
slopes_mt <- ddply(ps_agg_snarc_mt, .(subject_id), function(x) coef(lm(dMT ~ target, data=x)))
t.test(slopes_mt$target, mu=0)
##
## One Sample t-test
##
## data: slopes_mt$target
## t = -1.2936, df = 42, p-value = 0.2029
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -6.336590 1.386245
## sample estimates:
## mean of x
## -2.475173
snarc_vert <- snarc[snarc$dimension=="vertical",]
snarc_vert$vert <- snarc_vert$button
snarc_vert$congruency <- factor(ifelse((snarc_vert$vert == "down" & snarc_vert$size == "small") | (snarc_vert$vert == "up" & snarc_vert$size == "large"), 1, 2), labels = c("congruent", "incongruent"))
ggplot(snarc_vert, aes(congruency, rt)) + points + errorbars + layout
ggplot(snarc_vert, aes(vert, rt, colour=congruency)) + points + errorbars + layout
ggplot(snarc_vert, aes(target, rt, colour=congruency, shape=vert)) + lines + stat_summary(fun.y=mean, geom="point", size=4) + errorbars + layout + x_ax
ps_agg_v <- aggregate(data=snarc_vert, rt ~ subject_id + target + vert, mean)
ps_agg_snarc_v <- merge(ps_agg_v[ps_agg_v$vert=="down",], ps_agg_v[ps_agg_v$vert=="up",], by=c("subject_id", "target"))
ps_agg_snarc_v$dRT <- ps_agg_snarc_v$rt.y - ps_agg_snarc_v$rt.x
ggplot(ps_agg_snarc_v, aes(target, dRT)) + points + reg + x_ax + layout + hline + labs(x = "Target number", y = "dRT (top - bottom) in ms", title = "Vertical 2D SNARC") + coord_cartesian(ylim = c(-60, 20))
# ggsave("snarc_vert_poster.png", units = "in", width = 7, height = 5.5, dpi = 600, bg="transparent")
snarc_slopes_hor <- ddply(ps_agg_snarc, .(subject_id), function(x) coef(lm(dRT ~ target, data=x)))
snarc_slopes_vert <- ddply(ps_agg_snarc_v, .(subject_id), function(x) coef(lm(dRT ~ target, data=x)))
t.test(snarc_slopes_hor$target, mu=0)
##
## One Sample t-test
##
## data: snarc_slopes_hor$target
## t = -0.50539, df = 42, p-value = 0.6159
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -6.097818 3.655344
## sample estimates:
## mean of x
## -1.221237
t_report(t.test(snarc_slopes_hor$target, mu=0))
## [1] "t(42) = -0.51, p = 0.616"
cohens_dz(t.test(snarc_slopes_hor$target, mu=0), T)
## [1] "Cohen's dz = 0.08"
t.test(snarc_slopes_vert$target, mu=0)
##
## One Sample t-test
##
## data: snarc_slopes_vert$target
## t = -0.15866, df = 42, p-value = 0.8747
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -8.052795 6.878867
## sample estimates:
## mean of x
## -0.5869639
t_report(t.test(snarc_slopes_vert$target, mu=0))
## [1] "t(42) = -0.16, p = 0.875"
cohens_dz(t.test(snarc_slopes_vert$target, mu=0), T)
## [1] "Cohen's dz = 0.02"
t.test(snarc_slopes_hor$target, snarc_slopes_vert$target, paired = T)
##
## Paired t-test
##
## data: snarc_slopes_hor$target and snarc_slopes_vert$target
## t = -0.14007, df = 42, p-value = 0.8893
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -9.772426 8.503880
## sample estimates:
## mean of the differences
## -0.634273
slopes_rc <- merge(snarc_slopes_hor, snarc_slopes_vert, by="subject_id")
slopes_rc$Horizontal <- slopes_rc$target.x
slopes_rc$Vertical <- slopes_rc$target.y
ggplot(slopes_rc, aes(Horizontal, Vertical)) +
geom_point(size=2.5) +
hline +
vline +
layout2# +
#coord_cartesian(xlim=c(-20,20), ylim=c(-20, 20))
ggplot(slopes_rc, aes(Horizontal, Vertical)) +
geom_point(size=2.5) +
hline +
vline +
layout2 +
reg# +
#coord_cartesian(xlim=c(-20,20), ylim=c(-20, 20))
cor.test(slopes_rc$Horizontal, slopes_rc$Vertical)
##
## Pearson's product-moment correlation
##
## data: slopes_rc$Horizontal and slopes_rc$Vertical
## t = -0.35105, df = 41, p-value = 0.7273
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3493432 0.2497063
## sample estimates:
## cor
## -0.05474318
print(paste("any incorrect responses: ", as.character(length(mini_dat[mini_dat$correct!=1,]$correct))))
## [1] "any incorrect responses: 67"
print(paste("too slow: ", as.character(length(mini_dat[mini_dat$correct==-1,]$correct))))
## [1] "too slow: 11"
print(paste("wrong button: ", as.character(length(mini_dat[mini_dat$correct==0,]$correct))))
## [1] "wrong button: 56"
mini_dat <- mini_dat[mini_dat$correct==1,]
mini_dat$side <- factor(ifelse(mini_dat$pressed_button=="b'le'", 1, ifelse(mini_dat$pressed_button=="b'ri", 2, 9)), labels = c("left", "right"))
ddply(mini_dat, .(side), summarise, M=mean(rt), SD=sd(rt))
## side M SD
## 1 left 789.6270 177.6681
## 2 right 778.4642 186.5272
ggplot(mini_dat, aes(target, rt)) + bars + errorbars + x_ax + layout
ggplot(mini_dat, aes(target, rt, colour=side)) + points + lines + errorbars + x_ax + layout
mini_dat$size <- factor(ifelse(mini_dat$target < 5, 1, 2), labels = c("small", "large"))
mini_dat$congruency <- factor(ifelse((mini_dat$side == "left" & mini_dat$size == "small") | (mini_dat$side == "right" & mini_dat$size == "large"), 1, 2), labels = c("congruent", "incongruent"))
pm_agg <- aggregate(data=mini_dat, rt ~ subject_id + target + side, mean)
pm_agg_snarc <- merge(pm_agg[pm_agg$side=="left",], pm_agg[pm_agg$side=="right",], by=c("subject_id", "target"))
pm_agg_snarc$dRT <- pm_agg_snarc$rt.y - pm_agg_snarc$rt.x
ggplot(pm_agg_snarc, aes(target, dRT)) + points + reg + x_ax + hline + labs(x = "Target number", y = "dRT (right - left) in ms", title = "1D SNARC") + coord_cartesian(ylim = c(-60, 20)) + layout
# ggsave("minisnarc_poster.png", units = "in", width = 7, height = 5.5, dpi = 600, bg="transparent")
minisnarc_slopes <- ddply(pm_agg_snarc, .(subject_id), function(x) coef(lm(dRT ~ target, data=x)))
t.test(minisnarc_slopes$target, mu=0)
##
## One Sample t-test
##
## data: minisnarc_slopes$target
## t = -2.6048, df = 42, p-value = 0.01266
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -9.476459 -1.202783
## sample estimates:
## mean of x
## -5.339621
t_report(t.test(minisnarc_slopes$target, mu=0))
## [1] "t(42) = -2.6, p = 0.013"
cohens_dz(t.test(minisnarc_slopes$target, mu=0), T)
## [1] "Cohen's dz = 0.4"
data_from_multisnarc <- snarc_slopes_hor
data_from_multisnarc$slope_multi_hor <- data_from_multisnarc$target
minisnarc_slopes$slope_mini <- minisnarc_slopes$target
merged_data <- merge(minisnarc_slopes, data_from_multisnarc, by="subject_id")
ggplot(merged_data, aes(slope_multi_hor, slope_mini)) + points + hline + vline + reg + labs(x="Horizontal slopes from 2D SNARC", y = "Slopes from 1D SNARC", subtitle = "Correlation horizontal 2D & 1D SNARC") + layout
# ggsave(filename = "Mini_Multi_correlation.png", width = 7, height = 5.5, dpi = 600, units = "in", bg="transparent")
cor.test(merged_data$slope_mini, merged_data$slope_multi_hor)
##
## Pearson's product-moment correlation
##
## data: merged_data$slope_mini and merged_data$slope_multi_hor
## t = 1.7943, df = 41, p-value = 0.08014
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.03320787 0.52742781
## sample estimates:
## cor
## 0.2698272
merged_mini_multiMT <- merge(minisnarc_slopes, slopes_mt, by="subject_id")
merged_mini_multiMT$multi_MT_hor <- merged_mini_multiMT$target.y
ggplot(merged_mini_multiMT, aes(multi_MT_hor, slope_mini)) + points + hline + vline + reg + layout + labs(x="Horizontal slopes 2D SNARC - Movement Time", y = "Slopes from 1D SNARC")
cor.test(merged_mini_multiMT$slope_mini, merged_mini_multiMT$multi_MT_hor)
##
## Pearson's product-moment correlation
##
## data: merged_mini_multiMT$slope_mini and merged_mini_multiMT$multi_MT_hor
## t = 2.8099, df = 41, p-value = 0.007563
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1154243 0.6265621
## sample estimates:
## cor
## 0.4018376
v_data_from_multisnarc <- snarc_slopes_vert
v_data_from_multisnarc$slope_multi_vert <- v_data_from_multisnarc$target
merged_data_v <- merge(minisnarc_slopes, v_data_from_multisnarc, by="subject_id")
ggplot(merged_data_v, aes(slope_multi_vert, slope_mini)) + points + hline + vline + reg + labs(x="Vertical slopes from 2D SNARC", y = "Slopes from 1D SNARC") + layout
# ggsave(filename = "Mini_MultiVert_correlation.png", width = 7, height = 5.5, dpi = 600, units = "in", bg="transparent")
cor.test(merged_data_v$slope_mini, merged_data_v$slope_multi_vert)
##
## Pearson's product-moment correlation
##
## data: merged_data_v$slope_mini and merged_data_v$slope_multi_vert
## t = -0.0079194, df = 41, p-value = 0.9937
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3014687 0.2992182
## sample estimates:
## cor
## -0.0012368
sna_hor_slopes_from_other <- snarcy_hor_general_slopes
sna_hor_slopes_from_other$sna_slope_hor <- sna_hor_slopes_from_other$target
minisnarc_slopes$minisnarc_slope <- minisnarc_slopes$target
merged_sna_mini <- merge(minisnarc_slopes, sna_hor_slopes_from_other, by="subject_id")
ggplot(merged_sna_mini, aes(sna_slope_hor, minisnarc_slope)) + points + hline + vline + reg + labs(x="Horizontal slopes from 2D SNA", y = "Slopes from 1D SNARC", subtitle = "Correlation horizontal SNA & 1D SNARC") + layout
# ggsave(filename = "Mini_SNA_correlation.png", width = 7, height = 5.5, dpi = 600, units = "in", bg="transparent")
cor.test(merged_sna_mini$sna_slope_hor, merged_sna_mini$minisnarc_slope)
##
## Pearson's product-moment correlation
##
## data: merged_sna_mini$sna_slope_hor and merged_sna_mini$minisnarc_slope
## t = -0.76665, df = 41, p-value = 0.4477
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4047724 0.1881819
## sample estimates:
## cor
## -0.1188811
sna_vert_slopes_from_other <- snarcy_vert_general_slopes
sna_vert_slopes_from_other$sna_slope_vert <- sna_vert_slopes_from_other$target
merged_snaV_mini <- merge(minisnarc_slopes, sna_vert_slopes_from_other, by="subject_id")
ggplot(merged_snaV_mini, aes(sna_slope_vert, minisnarc_slope)) + points + hline + vline + reg + labs(x="Vertical slopes from 2D SNA", y = "Slopes from 1D SNARC", subtitle = "Correlation vertical SNA & 1D SNARC") + layout
# ggsave(filename = "Mini_SNAvert_correlation.png", width = 7, height = 5.5, dpi = 600, units = "in", bg="transparent")
cor.test(merged_snaV_mini$sna_slope_vert, merged_snaV_mini$minisnarc_slope)
##
## Pearson's product-moment correlation
##
## data: merged_snaV_mini$sna_slope_vert and merged_snaV_mini$minisnarc_slope
## t = -1.9049, df = 41, p-value = 0.06383
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.53930041 0.01662493
## sample estimates:
## cor
## -0.2851427
sna_hor_slopes_from_other <- snarcy_hor_general_slopes
sna_hor_slopes_from_other$sna_slope_hor <- sna_hor_slopes_from_other$target
snarc_slopes_hor$snarc_slope_hor <- snarc_slopes_hor$target
merged_data_sna_snarc <- merge(sna_hor_slopes_from_other, snarc_slopes_hor, by="subject_id")
ggplot(merged_data_sna_snarc, aes(sna_slope_hor, snarc_slope_hor)) + points + hline + vline + reg + layout + labs(x="Horizontal slopes 2D SNA", y = "Horizontal slopes 2D SNARC")
cor.test(merged_data_sna_snarc$sna_slope_hor, merged_data_sna_snarc$snarc_slope_hor)
##
## Pearson's product-moment correlation
##
## data: merged_data_sna_snarc$sna_slope_hor and merged_data_sna_snarc$snarc_slope_hor
## t = -0.43519, df = 41, p-value = 0.6657
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3608049 0.2373689
## sample estimates:
## cor
## -0.06780919
sna_vert_slopes_from_other <- snarcy_vert_general_slopes
sna_vert_slopes_from_other$sna_slope_vert <- sna_vert_slopes_from_other$target
snarc_slopes_vert$snarc_slope_vert <- snarc_slopes_vert$target
merged_data_sna_snarc_v <- merge(sna_vert_slopes_from_other, snarc_slopes_vert, by="subject_id")
ggplot(merged_data_sna_snarc_v, aes(sna_slope_vert, snarc_slope_vert)) + points + hline + vline + reg + layout + labs(x="Vertical slopes 2D SNA", y = "Vertical slopes 2D SNARC")
cor.test(merged_data_sna_snarc_v$sna_slope_vert, merged_data_sna_snarc_v$snarc_slope_vert)
##
## Pearson's product-moment correlation
##
## data: merged_data_sna_snarc_v$sna_slope_vert and merged_data_sna_snarc_v$snarc_slope_vert
## t = -0.41223, df = 41, p-value = 0.6823
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.3576888 0.2407422
## sample estimates:
## cor
## -0.06424702
We did not find evidence for a horizontal nor vertical SNARC effect in the 2D SNARC paradigm. Our best guess so far is that spatial-numerical associations did not manifest on a trial-to-trial basis, but need more time to take effect. That is, switching between the two dimensions might have weakended spatial-numerical associations. In exploratory analyses we therefore also addressed potential effects of these switches between dimensions (or rather, of staying within the same dimension for two or more trials).
taskswitch <- function(df){
df$switched <- NA
df$switched_i <- 0
for(i in df$trial){
if(i > 0){
df[df$trial == i,]$switched <- ifelse(df[df$trial == i,]$dimension == df[df$trial == i-1,]$dimension, 0, 1)
df[df$trial == i,]$switched_i <- ifelse(df[df$trial == i,]$dimension == df[df$trial == i-1,]$dimension, df[df$trial==i-1,]$switched_i + 1, 0)
} else{
df[df$trial == i,]$switched_i <- 0
}
}
return(df)
}
snarc_switch <- ddply(snarc_complete, .(subject_id, block), taskswitch)
snarc_switch$switched <- factor(snarc_switch$switched, labels = c("repeated dimension", "switched dimension"))
snarc_switch <- snarc_switch[snarc_switch$correct==1,]
snarc_switch$size <- factor(ifelse(snarc_switch$target < 5, 1, 2), labels = c("small", "large"))
snarc_switch$parity <- factor(ifelse(snarc_switch$target%%2==0, 1, 2), labels=c("even", "odd"))
snarc_switch_hor <- snarc_switch[snarc_switch$dimension=="horizontal",]
snarc_switch_hor$side <- factor(ifelse(snarc_switch_hor$pressed_button == "b'le'", 1, 2), labels = c("left", "right"))
snarc_switch_hor$congruency <- factor(ifelse((snarc_switch_hor$side == "left" & snarc_switch_hor$size == "small") | (snarc_switch_hor$side == "right" & snarc_switch_hor$size == "large"), 1, 2), labels = c("congruent", "incongruent"))
snarc_switch_vert <- snarc_switch[snarc_switch$dimension=="vertical",]
snarc_switch_vert$vert <- factor(ifelse(snarc_switch_vert$pressed_button == "b'do'", 1, 2), labels = c("down", "up"))
snarc_switch_vert$congruency <- factor(ifelse((snarc_switch_vert$vert == "down" & snarc_switch_vert$size == "small") | (snarc_switch_vert$vert == "up" & snarc_switch_vert$size == "large"), 1, 2), labels = c("congruent", "incongruent"))
ps_agg_s <- aggregate(data=snarc_switch_hor, rt ~ subject_id + switched + target + side, mean)
ps_agg_snarc_s <- merge(ps_agg_s[ps_agg_s$side=="left",], ps_agg_s[ps_agg_s$side=="right",], by=c("subject_id", "target", "switched"))
ps_agg_snarc_s$dRT <- ps_agg_snarc_s$rt.y - ps_agg_snarc_s$rt.x
ggplot(ps_agg_snarc_s, aes(target, dRT)) + points + reg + errorbars + facet_wrap(~switched)
ps_agg_s_mult <- aggregate(data=snarc_switch_hor, rt ~ subject_id + switched_i + target + side, mean)
ps_agg_snarc_s_mult <- merge(ps_agg_s_mult[ps_agg_s_mult$side=="left",], ps_agg_s_mult[ps_agg_s_mult$side=="right",], by=c("subject_id", "target", "switched_i"))
ps_agg_snarc_s_mult$dRT <- ps_agg_snarc_s_mult$rt.y - ps_agg_snarc_s_mult$rt.x
ggplot(ps_agg_snarc_s_mult, aes(target, dRT)) + points + reg + errorbars + facet_wrap(~switched_i)
## Warning: Removed 3 rows containing missing values (geom_errorbar).
# ggplot(ps_agg_snarc, aes(target, dRT)) + points + reg + facet_wrap(~subject_id)
ps_agg_snarc_s_mult$switched_med <- ifelse(ps_agg_snarc_s_mult$switched_i %in% c(1,2), "once_or_twice", ifelse(ps_agg_snarc_s_mult$switched_i%in% c(3,4), "thrice_or_fource", NA))
slopes_switched_med <- ddply(ps_agg_snarc_s_mult[!is.na(ps_agg_snarc_s_mult$switched_med),], .(subject_id, switched_med), function(x) coef(lm(dRT ~ target, data=x)))
slopes_switched_i <- ddply(ps_agg_snarc_s_mult, .(subject_id, switched_i), function(x) coef(lm(dRT ~ target, data=x)))
ggplot(slopes_switched_i, aes(switched_i, target)) + bars + errorbars
## Warning: Removed 33 rows containing non-finite values (stat_summary).
## Warning: Removed 33 rows containing non-finite values (stat_summary).
## Warning: Removed 1 rows containing missing values (geom_errorbar).
ggplot(slopes_switched_med, aes(switched_med, target)) + bars + errorbars
## Warning: Removed 12 rows containing non-finite values (stat_summary).
## Warning: Removed 12 rows containing non-finite values (stat_summary).
for (i in c(0:3)){
print(t_report(t.test(slopes_switched_i[slopes_switched_i$switched_i==i,]$target, mu = 0)))
}
## [1] "t(42) = -0.11, p = 0.909"
## [1] "t(42) = 0.22, p = 0.825"
## [1] "t(38) = -0.81, p = 0.425"
## [1] "t(11) = 0.74, p = 0.473"
ps_agg_s <- aggregate(data=snarc_switch_hor, mt ~ subject_id + switched_i + target + side, mean)
ps_agg_snarc_s_mt <- merge(ps_agg_s[ps_agg_s$side=="left",], ps_agg_s[ps_agg_s$side=="right",], by=c("subject_id", "target", "switched_i"))
ps_agg_snarc_s_mt$dMT <- ps_agg_snarc_s_mt$mt.y - ps_agg_snarc_s_mt$mt.x
ggplot(ps_agg_snarc_s_mt, aes(target, dMT)) + points + reg + errorbars + facet_wrap(~switched_i)
## Warning: Removed 3 rows containing missing values (geom_errorbar).
# ggplot(ps_agg_snarc, aes(target, dMT)) + points + reg + facet_wrap(~subject_id)
ps_agg_snarc_s_mt$switched_med <- ifelse(ps_agg_snarc_s_mt$switched_i %in% c(1,2), "once_or_twice", ifelse(ps_agg_snarc_s_mt$switched_i%in% c(3,4), "thrice_or_fource", NA))
slopes_switched_med <- ddply(ps_agg_snarc_s_mt[!is.na(ps_agg_snarc_s_mt$switched_med),], .(subject_id, switched_med), function(x) coef(lm(dMT ~ target, data=x)))
slopes_switched_i <- ddply(ps_agg_snarc_s_mt, .(subject_id, switched_i), function(x) coef(lm(dMT ~ target, data=x)))
ggplot(slopes_switched_i, aes(switched_i, target)) + bars + errorbars
## Warning: Removed 33 rows containing non-finite values (stat_summary).
## Warning: Removed 33 rows containing non-finite values (stat_summary).
## Warning: Removed 1 rows containing missing values (geom_errorbar).
ggplot(slopes_switched_med, aes(switched_med, target)) + bars + errorbars
## Warning: Removed 12 rows containing non-finite values (stat_summary).
## Warning: Removed 12 rows containing non-finite values (stat_summary).
for (i in c(0:3)){
print(t_report(t.test(slopes_switched_i[slopes_switched_i$switched_i==i,]$target, mu = 0)))
}
## [1] "t(42) = 0.55, p = 0.587"
## [1] "t(42) = -0.54, p = 0.592"
## [1] "t(38) = -1.06, p = 0.296"
## [1] "t(11) = 1.25, p = 0.238"
snarc_switch_hor$horizontal_mappings <- ifelse(snarc_switch_hor$mapping %in% c("left_down_odd", "right_down_odd"), "down_odd", "up_odd")
ps_agg_m <- aggregate(data=snarc_switch_hor, rt ~ subject_id + horizontal_mappings + target + side, mean)
ps_agg_snarc_m <- merge(ps_agg_m[ps_agg_m$side=="left",], ps_agg_m[ps_agg_m$side=="right",], by=c("subject_id", "target", "horizontal_mappings"))
ps_agg_snarc_m$dRT <- ps_agg_snarc_m$rt.y - ps_agg_snarc_m$rt.x
ps_agg_snarc_m_slopes <- ddply(ps_agg_snarc_m, .(subject_id, horizontal_mappings), function(x) coef(lm(dRT ~ target, data=x)))
t.test(ps_agg_snarc_m_slopes[ps_agg_snarc_m_slopes$horizontal_mappings=="down_odd",]$target, mu=0)
##
## One Sample t-test
##
## data: ps_agg_snarc_m_slopes[ps_agg_snarc_m_slopes$horizontal_mappings == "down_odd", ]$target
## t = -1.1091, df = 42, p-value = 0.2737
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -13.001885 3.779247
## sample estimates:
## mean of x
## -4.611319
t.test(ps_agg_snarc_m_slopes[ps_agg_snarc_m_slopes$horizontal_mappings=="up_odd",]$target, mu=0)
##
## One Sample t-test
##
## data: ps_agg_snarc_m_slopes[ps_agg_snarc_m_slopes$horizontal_mappings == "up_odd", ]$target
## t = 0.58706, df = 42, p-value = 0.5603
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -4.559397 8.300287
## sample estimates:
## mean of x
## 1.870445
ggplot(ps_agg_snarc_m, aes(target, dRT)) + points + reg + errorbars + facet_wrap(~horizontal_mappings)
ps_agg_v_s <- aggregate(data=snarc_switch_vert, rt ~ subject_id + switched + target + vert, mean)
ps_agg_snarc_v_s <- merge(ps_agg_v_s[ps_agg_v_s$vert=="down",], ps_agg_v_s[ps_agg_v_s$vert=="up",], by=c("subject_id", "target", "switched"))
ps_agg_snarc_v_s$dRT <- ps_agg_snarc_v_s$rt.y - ps_agg_snarc_v_s$rt.x
ps_agg_snarc_v_s_slopes <- ddply(ps_agg_snarc_v_s, .(subject_id, switched), function(x) coef(lm(dRT ~ target, data=x)))
t.test(ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched=="repeated dimension",]$target, mu=0)
##
## One Sample t-test
##
## data: ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched == "repeated dimension", ]$target
## t = 0.76846, df = 42, p-value = 0.4465
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -6.756014 15.065344
## sample estimates:
## mean of x
## 4.154665
t.test(ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched=="switched dimension",]$target, mu=0)
##
## One Sample t-test
##
## data: ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched == "switched dimension", ]$target
## t = -1.5724, df = 42, p-value = 0.1234
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -16.955156 2.104588
## sample estimates:
## mean of x
## -7.425284
t.test(ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched=="repeated dimension",]$target, ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched=="switched dimension",]$target, paired = T)
##
## Paired t-test
##
## data: ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched == "repeated dimension", and ps_agg_snarc_v_s_slopes[ps_agg_snarc_v_s_slopes$switched == "switched dimension", ]$target and ]$target
## t = 1.7042, df = 42, p-value = 0.09573
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -2.132822 25.292719
## sample estimates:
## mean of the differences
## 11.57995
ggplot(ps_agg_snarc_v_s, aes(target, dRT)) + points + reg + errorbars + facet_wrap(~switched)
# ggplot(ps_agg_snarc_v, aes(target, dRT)) + points + reg + facet_wrap(~subject_id)
ps_agg_s_v_i <- aggregate(data=snarc_switch_vert, rt ~ subject_id + switched_i + target + vert, mean)
ps_agg_snarc_s_v <- merge(ps_agg_s_v_i[ps_agg_s_v_i$vert=="down",], ps_agg_s_v_i[ps_agg_s_v_i$vert=="up",], by=c("subject_id", "target", "switched_i"))
ps_agg_snarc_s_v$dRT <- ps_agg_snarc_s_v$rt.y - ps_agg_snarc_s_v$rt.x
ggplot(ps_agg_snarc_s_v, aes(target, dRT)) + points + reg + errorbars + facet_wrap(~switched_i)
## Warning: Removed 2 rows containing missing values (geom_errorbar).
# ggplot(ps_agg_snarc, aes(target, dRT)) + points + reg + facet_wrap(~subject_id)
ps_agg_snarc_s_v$switched_med <- ifelse(ps_agg_snarc_s_v$switched_i %in% c(1), 1, ifelse(ps_agg_snarc_s_v$switched_i%in% c(2,3), 2, NA))
slopes_switched_med <- ddply(ps_agg_snarc_s_v[!is.na(ps_agg_snarc_s_v$switched_med),], .(subject_id, switched_med), function(x) coef(lm(dRT ~ target, data=x)))
slopes_switched_i <- ddply(ps_agg_snarc_s_v, .(subject_id, switched_i), function(x) coef(lm(dRT ~ target, data=x)))
ggplot(slopes_switched_i, aes(switched_i, target)) + bars + errorbars
## Warning: Removed 31 rows containing non-finite values (stat_summary).
## Warning: Removed 31 rows containing non-finite values (stat_summary).
ggplot(slopes_switched_med, aes(switched_med, target)) + bars + errorbars
ps_agg_s_v_i <- aggregate(data=snarc_switch_vert, mt ~ subject_id + switched_i + target + vert, mean)
ps_agg_snarc_s_v <- merge(ps_agg_s_v_i[ps_agg_s_v_i$vert=="down",], ps_agg_s_v_i[ps_agg_s_v_i$vert=="up",], by=c("subject_id", "target", "switched_i"))
ps_agg_snarc_s_v$dMT <- ps_agg_snarc_s_v$mt.y - ps_agg_snarc_s_v$mt.x
ggplot(ps_agg_snarc_s_v, aes(target, dMT)) + points + reg + errorbars + facet_wrap(~switched_i)
## Warning: Removed 2 rows containing missing values (geom_errorbar).
# ggplot(ps_agg_snarc, aes(target, dMT)) + points + reg + facet_wrap(~subject_id)
ps_agg_snarc_s_v$switched_med <- ifelse(ps_agg_snarc_s_v$switched_i %in% c(1), 1, ifelse(ps_agg_snarc_s_v$switched_i%in% c(2,3), 2, NA))
slopes_switched_med <- ddply(ps_agg_snarc_s_v[!is.na(ps_agg_snarc_s_v$switched_med),], .(subject_id, switched_med), function(x) coef(lm(dMT ~ target, data=x)))
slopes_switched_i <- ddply(ps_agg_snarc_s_v, .(subject_id, switched_i), function(x) coef(lm(dMT ~ target, data=x)))
ggplot(slopes_switched_i, aes(switched_i, target)) + bars + errorbars
## Warning: Removed 31 rows containing non-finite values (stat_summary).
## Warning: Removed 31 rows containing non-finite values (stat_summary).
ggplot(slopes_switched_med, aes(switched_med, target)) + bars + errorbars
snarc_switch_vert$vertical_mappings <- ifelse(snarc_switch_vert$mapping %in% c("left_down_odd", "left_up_odd"), "left_odd", "right_odd")
ps_agg_m_v <- aggregate(data=snarc_switch_vert, rt ~ subject_id + vertical_mappings + target + vert, mean)
ps_agg_snarc_m_v <- merge(ps_agg_m_v[ps_agg_m_v$vert=="down",], ps_agg_m_v[ps_agg_m_v$vert=="up",], by=c("subject_id", "target", "vertical_mappings"))
ps_agg_snarc_m_v$dRT <- ps_agg_snarc_m_v$rt.y - ps_agg_snarc_m_v$rt.x
ps_agg_snarc_m_v_slopes <- ddply(ps_agg_snarc_m_v, .(subject_id, vertical_mappings), function(x) coef(lm(dRT ~ target, data=x)))
t.test(ps_agg_snarc_m_v_slopes[ps_agg_snarc_m_v_slopes$vertical_mappings=="left_odd",]$target, mu=0)
##
## One Sample t-test
##
## data: ps_agg_snarc_m_v_slopes[ps_agg_snarc_m_v_slopes$vertical_mappings == "left_odd", ]$target
## t = 0.67266, df = 42, p-value = 0.5048
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -5.927065 11.853691
## sample estimates:
## mean of x
## 2.963313
t.test(ps_agg_snarc_m_v_slopes[ps_agg_snarc_m_v_slopes$vertical_mappings=="right_odd",]$target, mu=0)
##
## One Sample t-test
##
## data: ps_agg_snarc_m_v_slopes[ps_agg_snarc_m_v_slopes$vertical_mappings == "right_odd", ]$target
## t = -0.82287, df = 42, p-value = 0.4152
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -13.353770 5.618035
## sample estimates:
## mean of x
## -3.867868
ggplot(ps_agg_snarc_m_v, aes(target, dRT)) + points + reg + errorbars + facet_wrap(~vertical_mappings)
2D SNA (Experiment 1)
2D SNARC (Experiment 2)
The same button board was used for Experiment 3 (1D SNARC). However, only the leftmost and rightmost button were used and participants were asked to use their left and right index finger, respectively, to press the buttons.
Procedure 2D SNA (Experiment 1)
Auditory stimuli (and target stimuli) were 1, 2, 8, and 9. (“Neun” is German for “nine”.)
Instruction sheet 2D SNARC (Experiment 2)
Colour codes were balanced between participants (i.e., yellow or blue for horizontally or vertically aligned buttons). Each participant absoved each of the four possible parity-to-position mappings. (“gerade” and “ungerade” is German for “even” and “odd”, respectively.)
Instruction sheet 1D SNARC (Experiment 3)
Each participant absolved each of the two possible parity-to-position mappings.(“gerade” and “ungerade” is German for “even” and “odd”, respectively.)